/**
 * @description 登录、获取用户信息、退出登录、清除accessToken逻辑，不建议修改
 */

import Vue from 'vue'
import { getUserInfo, login, logout } from '@/api/user'
import { getAccessToken, removeAccessToken, setAccessToken } from '@/utils/accessToken'
import { resetRouter } from '@/router'
import { title, tokenName } from '@/config'

const state = () => ({
  accessToken: getAccessToken(),
  username: '',
  avatar: '',
  permissions: [],
})
const getters = {
  accessToken: (state) => state.accessToken,
  username: (state) => state.username,
  avatar: (state) => state.avatar,
  permissions: (state) => state.permissions,
}
const mutations = {
  setAccessToken(state, accessToken) {
    state.accessToken = accessToken
    /* eslint-disable */
    // state.accessToken =
    //   'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJtZW1iZXJpZCI6ImFkbWluIiwiaWF0IjoxNjkxNTY2NjY0LCJleHAiOjE2OTUxNjY2NjR9.rEvcI246EFTYxl_BYavsWltoZOpwFrbM4aZQP7njTDM'
    setAccessToken(accessToken)
  },
  setUsername(state, username) {
    state.username = username
  },
  setAvatar(state, avatar) {
    state.avatar = avatar
  },
  setPermissions(state, permissions) {
    state.permissions = permissions
  },
}
const actions = {
  setPermissions({ commit }, permissions) {
    commit('setPermissions', permissions)
  },
  async login({ commit }, userInfo) {
    const { data } = await login(userInfo)
   if(data && typeof data === 'object' && data.token && userInfo && typeof userInfo === 'object'){
     commit('setUsername', userInfo.username)
	   const accessToken = data.token
	   if (accessToken) {
	     commit('setAccessToken', accessToken)
	     const hour = new Date().getHours()
	     const thisTime =
	       hour < 8
	         ? '早上好'
	         : hour <= 11
	         ? '上午好'
	         : hour <= 13
	         ? '中午好'
	         : hour < 18
	         ? '下午好'
	         : '晚上好'
	     Vue.prototype.$baseNotify(`欢迎登录${title}`, `${thisTime}！`)
	   } else {
	     Vue.prototype.$baseMessage(`登录接口异常，未正确返回${tokenName}...`, 'error')
	   }
   }else{
	   Vue.prototype.$baseMessage(`登录接口异常，未正确返回${tokenName}...`, 'error')

   }

  },
  async getUserInfo({ commit, state }) {
    const { data } = await getUserInfo(state.accessToken)
    if (!data) {
      Vue.prototype.$baseMessage('验证失败，请重新登录...', 'error')
      return false
    }
    let { permissions, username, avatar } = data
    if (permissions && username && Array.isArray(permissions)) {
      commit('setPermissions', permissions)
      commit('setUsername', username)
      commit('setAvatar', avatar)
      return permissions
    } else {
      Vue.prototype.$baseMessage('用户信息接口异常', 'error')
      return false
    }
  },
  async logout({ dispatch }) {
    // await logout(state.accessToken)
    await dispatch('resetAccessToken')
    await resetRouter()
  },
  resetAccessToken({ commit }) {
    commit('setPermissions', [])
    commit('setAccessToken', '')
    removeAccessToken()
  },
}
export default { state, getters, mutations, actions }
